package it.polimi.traveldream.ejbclient.eaos;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import it.polimi.traveldream.ejbclient.dtos.BaseProductDTO;
import it.polimi.traveldream.ejbclient.dtos.ExcursionDTO;
import it.polimi.traveldream.ejbclient.dtos.HotelDTO;
import it.polimi.traveldream.ejbclient.dtos.TransportDTO;
import it.polimi.traveldream.ejbclient.dtos.TravelPackageDTO;
import it.polimi.traveldream.utils.exceptions.NotAllDataException;
import it.polimi.traveldream.utils.exceptions.NotAvailableException;
import it.polimi.traveldream.utils.exceptions.NotCoherentException;
import it.polimi.traveldream.utils.exceptions.NotSuchProductException;
import it.polimi.traveldream.utils.exceptions.NotSuchUserException;

import javax.ejb.Local;

@Local
public interface PackageCompositionServiceEAO {
	public TravelPackageDTO initCustomComposition(int predefinedPackageId)
			throws NotSuchProductException;
	public void initPredefinedComposition();
	public void putProduct(BaseProductDTO product);
	public void pullProduct(BaseProductDTO product);
	public void setBaseData(Date start, Date end, int reservations)
			throws NotCoherentException, NotAllDataException;
	public void setDescription(String description);
	public int composeCustomPackage()
			throws NotAvailableException, NotCoherentException, NotAllDataException,
			NotSuchProductException, NotSuchUserException;
	public int composePredefinedPackage(Date expiry, BigDecimal basePrice)
			throws NotAvailableException, NotCoherentException, NotAllDataException,
			NotSuchProductException;
	public List<TransportDTO> getTransports() throws NotAllDataException;
	public List<HotelDTO> getHotels() throws NotAllDataException;
	public List<ExcursionDTO> getExcursions() throws NotAllDataException;
}
